#pragma once

#define rad(x) (float) ((3.141592654f * x) / 180.0f)
#define deg(x) (float) ((180.0f * x) / 3.141592654f)

#include <math.h>

namespace sm
{
	class Vec3
	{
	public:
		float x;
		float y;
		float z;

		Vec3();
		Vec3(float x, float y, float z);

		void Set(float x, float y, float z);

		float &operator [](int i);

		Vec3 operator *  (Vec3 &v);
		Vec3 operator *  (float s);
		Vec3 operator +  (Vec3 &v);
		Vec3 operator -  (Vec3 &v);

		Vec3 &operator *= (Vec3 &v);
		Vec3 &operator *= (float s);
		Vec3 &operator += (Vec3 &v);
		Vec3 &operator -= (Vec3 &v);

		void operator = (float v[3]);
		bool operator ==(Vec3 &v);
		bool operator !=(Vec3 &v);

		void Normalize();
		void Reverse();
		void SetLength(float l);
		float GetLength();

		void RotateX(float a);
		void RotateY(float a);
		void RotateZ(float a);

		static float Dot(Vec3 &v1, Vec3 &v2);
		static float GetAngle(Vec3 &v1, Vec3 &v2);
		static Vec3 ToVec3(float v[3]);
		static Vec3 ToVec3(float x, float y, float z);
	};
}